// Learn TypeScript:
//  - https://docs.cocos.com/creator/2.4/manual/en/scripting/typescript.html
// Learn Attribute:
//  - https://docs.cocos.com/creator/2.4/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:

import ComponentBase from "../../BASE/ComponentBase";

//  - https://docs.cocos.com/creator/2.4/manual/en/scripting/life-cycle-callbacks.html
const { ccclass, property } = cc._decorator;

@ccclass
export default class Drag extends ComponentBase {
  _isTouched: boolean = false;
  _parentNode: cc.Node = null;

  // onLoad () {
  // }

  start() {
    this.node.on("touchstart", this.onTouchStart, this);
    this.node.on("touchmove", this.onTouchMove, this);
    this.node.on("touchend", this.onTouchEnd, this);
    this.node.on("touchcancel", this.onTouchEnd, this);

    this._parentNode = this.node.parent;
  }

  private onTouchStart(evt: cc.Event.EventTouch) {
    this._isTouched = true;
    let pos = this.getWorldPos(this.node);
    let canvas = cc.find("/Canvas");
    this.node.setParent(canvas);
    this.setWorldPos(this.node,pos);
  }
  private onTouchMove(evt: cc.Event.EventTouch) {
    if (this._isTouched) {
      this.node.setPosition(this.node.x + evt.getDeltaX(), this.node.y + evt.getDeltaY());
    }
  }
  private onTouchEnd(evt: TouchEvent) {
    this._isTouched = false;
    let pos = this.getWorldPos(this.node);
    this.node.setParent(this._parentNode);
    this.setWorldPos(this.node,pos);
  }



}

